package com.sagframe.sagacity.sqltoy.plus.chain;

import org.sagacity.sqltoy.model.Page;

import java.util.List;
import java.util.Optional;

/**
 * 查询
 *
 * @param <T>
 */
public interface ChainQuery<T> {

    /**
     * 批量获取
     *
     * @return
     */
    List<T> list();

    /**
     * 获取单个
     *
     * @return
     */
    T one();

    /**
     * 获取单个
     *
     * @return 单个
     */
    default Optional<T> oneOpt() {
        return Optional.ofNullable(one());
    }

    /**
     * 分页获取
     *
     * @param page
     * @return
     */
    Page<T> page(Page<?> page);

    /**
     * 统计
     *
     * @return
     */
    long count();

    /**
     * 是否存在
     *
     * @return
     */
    default boolean exists() {
        return count() > 0;
    }

    /**
     * 根据查询条件删除
     *
     * @return
     */
    long delete();
}
